<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
<!-- graphics.qdoc -->
  <title>Graphics | Qt 5.14</title>
  <link rel="stylesheet" type="text/css" href="style/offline-simple.css" />
  <script type="text/javascript">
    document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css");
    // loading style sheet breaks anchors that were jumped to before
    // so force jumping to anchor again
    setTimeout(function() {
        var anchor = location.hash;
        // need to jump to different anchor first (e.g. none)
        location.hash = "#";
        setTimeout(function() {
            location.hash = anchor;
        }, 0);
    }, 0);
  </script>
</head>
<body>
<div class="header" id="qtdocheader">
  <div class="main">
    <div class="main-rounded">
      <div class="navigationbar">
        <table><tr>
<td ><a href="index.html">Qt 5.14</a></td><td >Graphics</td></tr></table><table class="buildversion"><tr>
<td id="buildversion" width="100%" align="right">Qt 5.14.2 Reference Documentation</td>
        </tr></table>
      </div>
    </div>
<div class="content">
<div class="line">
<div class="content mainContent">
<div class="sidebar">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#2d-graphics-with-qpainter">2D Graphics with QPainter</a></li>
<li class="level1"><a href="#opengl-and-3d">OpenGL and 3D</a></li>
<li class="level1"><a href="#qt-quick-scene-graph">Qt Quick Scene Graph</a></li>
<li class="level1"><a href="#printing">Printing</a></li>
<li class="level1"><a href="#images">Images</a></li>
</ul>
</div>
<div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">Graphics</h1>
<span class="subtitle"></span>
<!-- $$$topics-graphics.html-description -->
<div class="descr"> <a name="details"></a>
<p>Graphics in Qt 5 is primarily done either through the imperative <a href="../qtgui/qpainter.html">QPainter</a> API, or through Qt’s declarative UI language, Qt Quick, and its scene graph back-end. Qt 5's graphics capabilities also includes support for printing, as well as the loading and saving of various image formats.</p>
<a name="2d-graphics-with-qpainter"></a>
<h2 id="2d-graphics-with-qpainter">2D Graphics with QPainter</h2>
<p><a href="../qtgui/qpainter.html">QPainter</a> provides API for drawing vector graphics, text and images onto different surfaces, or <a href="../qtgui/qpaintdevice.html">QPaintDevice</a> instances, such as <a href="../qtgui/qimage.html">QImage</a>, <a href="whatsnew50.html#qopenglpaintdevice">QOpenGLPaintDevice</a>, <a href="../qtwidgets/qwidget.html">QWidget</a>, and <a href="../qtprintsupport/qprinter.html">QPrinter</a>. The actual drawing happens in the <a href="../qtgui/qpaintdevice.html">QPaintDevice</a>'s <a href="../qtgui/qpaintengine.html">QPaintEngine</a>. The software rasterizer and the OpenGL (ES) 2.0 back-ends are the two most important <a href="../qtgui/qpaintengine.html">QPaintEngine</a> implementations. The raster paint engine is Qt’s software rasterizer, and is used when drawing on a <a href="../qtgui/qimage.html">QImage</a> or <a href="../qtwidgets/qwidget.html">QWidget</a>. Its strength over the OpenGL paint engine is its high quality when antialiasing is enabled, and a complete feature set.</p>
<ul>
<li><a href="../qtgui/paintsystem.html">Paint System</a> - Overview over the <a href="../qtgui/qpainter.html">QPainter</a> classes and architecture.</li>
<li><a href="../qtgui/coordsys.html">Coordinate System</a> - Explains how <a href="../qtgui/qpainter.html">QPainter</a>'s coordinate system works.</li>
<li><a href="../qtgui/paintsystem-drawing.html">Drawing and Filling</a> - Explains how <a href="../qtgui/qpainter.html">QPainter</a> performs filling and outlining of vector shapes.</li>
</ul>
<p>The most important rendering targets for <a href="../qtgui/qpainter.html">QPainter</a> are:</p>
<ul>
<li><a href="../qtgui/qimage.html">QImage</a> - A hardware-independent image representation with direct pixel access. <a href="../qtgui/qpainter.html">QPainter</a> will use the software rasterizer to draw to <a href="../qtgui/qimage.html">QImage</a> instances.</li>
<li><a href="../qtgui/qpixmap.html">QPixmap</a> - A image representation suited for display on screen. <a href="../qtgui/qpainter.html">QPainter</a> will primarily use the software rasterizer to draw to <a href="../qtgui/qpixmap.html">QPixmap</a> instances.</li>
<li><a href="whatsnew50.html#qopenglpaintdevice">QOpenGLPaintDevice</a> - A paint device to render to the current OpenGL (ES) 2.0 context. <a href="../qtgui/qpainter.html">QPainter</a> will use hardware accellerated OpenGL calls to draw to <a href="whatsnew50.html#qopenglpaintdevice">QOpenGLPaintDevice</a> instances.</li>
<li><a href="../qtgui/qbackingstore.html">QBackingStore</a> - A backbuffer for top-level windows. <a href="../qtgui/qpainter.html">QPainter</a> will primarily use the software rasterizer to draw to <a href="../qtgui/qbackingstore.html">QBackingStore</a> instances.</li>
<li><a href="../qtwidgets/qwidget.html">QWidget</a> - A baseclass for pre-Qt Quick user interface classes. <a href="../qtgui/qpainter.html">QPainter</a> will render widgets using a <a href="../qtgui/qbackingstore.html">QBackingStore</a>.</li>
<li><a href="../qtwidgets/qopenglwidget.html">QOpenGLWidget</a> - A painter can also be opened on a <a href="../qtwidgets/qopenglwidget.html">QOpenGLWidget</a>. This is provided as a convenience, since technically this is no different than using <a href="whatsnew50.html#qopenglpaintdevice">QOpenGLPaintDevice</a>.</li>
</ul>
<p><a href="../qtgui/qpainter.html">QPainter</a> and related classes are part of the <a href="../qtgui/qtgui-index.html">Qt GUI</a> module.</p>
<a name="opengl-and-3d"></a>
<h2 id="opengl-and-3d">OpenGL and 3D</h2>
<p>OpenGL is the most widely adopted graphics API for hardware accelerated and 3D graphics, implemented on all desktop platforms and almost every mobile and embedded platform. The Qt library contains a number of classes that help users integrate graphics driven by OpenGL or other graphics API calls into their applications, as well as add-on modules for displaying 3D content.</p>
<ul>
<li><a href="../qtgui/qtgui-index.html">OpenGL in Qt GUI</a> - An overview of how OpenGL integrates with the <a href="../qtgui/qtgui-index.html">Qt GUI</a> module.</li>
<li><a href="../qtwidgets/qopenglwidget.html">QOpenGLWidget</a> is a widget that allows adding OpenGL scenes into <a href="../qtwidgets/qwidget.html">QWidget</a>-based user interfaces.</li>
<li><a href="../qtquick/qtquick-visualcanvas-scenegraph.html#mixing-scene-graph-and-the-native-graphics-api">OpenGL and Qt Quick 2.0</a> - How to integrate application-provided graphics commands (OpenGL, Vulkan, Direct3D, etc.) into a Qt Quick scene graph.</li>
<li><a href="http://www.khronos.org/opengl">www.khronos.org/opengl</a> - The official OpenGL pages.</li>
<li><a href="../qtquick3d/qtquick3d-index.html">Qt Quick 3D</a> - An add-on module that provides a high-level API for creating 3D content or UIs based on Qt Quick.</li>
<li><a href="../qt3d/qt3d-index.html">Qt 3D</a> - An add-on module that provides functionality for near-realtime simulation systems with support for 2D and 3D rendering, in both Qt C++ and Qt Quick applications.</li>
</ul>
<p>Prior to Qt 5.0, OpenGL support in Qt was handled by the <a href="../qtopengl/qtopengl-index.html">Qt OpenGL</a> module. This module is still present, but new code should aim to use the new classes in the <a href="../qtgui/qtgui-index.html">Qt GUI</a> module. The classes are easily distinguisible based on their names: Classes with the <code>QGL</code> prefix should not be used. Instead, prefer the ones starting with <code>QOpenGL</code>.</p>
<a name="qt-quick-scene-graph"></a>
<h2 id="qt-quick-scene-graph">Qt Quick Scene Graph</h2>
<p>Qt Quick 2 introduces an OpenGL (ES) 2.0 scene graph for rendering. It generally improves the performance of Qt Quick 2 significantly compared to the <a href="../qtwidgets/qgraphicsview.html">QGraphicsView</a>/<a href="../qtgui/qpainter.html">QPainter</a>-based approach used in earlier versions.</p>
<p>The scene graph is a graphical representation of the Item scene. It can be thought of as a graphical deep copy, an independent structure that contains enough information to render all the items. Once it has been set up, it can be manipulated and rendered independently of the state of the items. On many platforms, the scene graph will even be rendered on a dedicated render thread while the GUI thread is preparing the next frame's state.</p>
<p>The scene graph is used when you import <a href="../qtquick/qtquick-module.html">QtQuick</a> 2.x in your QML file, and use <a href="../qtquick/qquickview.html">QQuickView</a> to run it.</p>
<ul>
<li><a href="../qtquick/qtquick-visualcanvas-scenegraph.html">Qt Quick Scene Graph</a> - Overview of the Qt Quick Scene Graph architecture.</li>
<li><a href="../qtquick/qtquick-visualcanvas-scenegraph.html#scene-graph-and-rendering">Scene Graph and Rendering</a> - Breakdown of the rendering of each frame.</li>
</ul>
<p>Qt Quick can be mixed with raw OpenGL rendering by connecting to the signals <a href="../qtquick/qquickwindow.html#beforeRendering">QQuickWindow::beforeRendering</a>() or <a href="../qtquick/qquickwindow.html#afterRendering">QQuickWindow::afterRendering</a>() which are emitted before and after the Qt Quick scene graph is rendered, respectively. There signals are emitted from the render thread (when applicable), and the connections need to be direct.</p>
<p>Qt Quick can also be rendered using <a href="http://doc.qt.io/QtQuick2DRenderer">Qt Quick 2D Renderer</a>. This raster paint engine enables rendering Qt Quick applications on platforms that do not have OpenGL.</p>
<a name="printing"></a>
<h2 id="printing">Printing</h2>
<p>Qt supports printing both directly to actual printers, locally or on the network, as well as producing PDF output. How to do printing with Qt is described in detail on the <a href="../qtprintsupport/qtprintsupport-index.html">Qt Print Support</a> page.</p>
<a name="images"></a>
<h2 id="images">Images</h2>
<p>Qt supports convenient reading, writing, and manipulating of images through the <a href="../qtgui/qimage.html">QImage</a> class. In addition, for more fine grained control of how images are loaded or saved, you can use the <a href="../qtgui/qimagereader.html">QImageReader</a> and <a href="../qtgui/qimagewriter.html">QImageWriter</a> classes respectively. To add support for additional image formats, outside of the ones provided by Qt, you can create image format plugins by using <a href="../qtgui/qimageiohandler.html">QImageIOHandler</a> and <a href="../qtgui/qimageioplugin.html">QImageIOPlugin</a>.</p>
<p>See the <a href="../qtgui/qpixmap.html#reading-and-writing-image-files">Reading and Writing Image Files</a> page for more information.</p>
</div>
<p><b>See also </b><a href="../qtgui/paintsystem.html">Paint System</a>.</p>
<!-- @@@topics-graphics.html -->
        </div>
       </div>
   </div>
   </div>
</div>
<div class="footer">
   <p>
   <acronym title="Copyright">&copy;</acronym> 2020 The Qt Company Ltd.
   Documentation contributions included herein are the copyrights of
   their respective owners.<br/>    The documentation provided herein is licensed under the terms of the    <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation    License version 1.3</a> as published by the Free Software Foundation.<br/>    Qt and respective logos are trademarks of The Qt Company Ltd.     in Finland and/or other countries worldwide. All other trademarks are property
   of their respective owners. </p>
</div>
</body>
</html>
